#include <iostream>
using namespace std;
template<typename T>
class Vla {
    unsigned size;
    T* ptr;

public:
    Vla(unsigned size) : size{size} {
        ptr = new T[size];
    }
    T& operator[](unsigned i) {
        return ptr[i];
    } 
    ~Vla() {
        delete[] ptr;
    }
};

int main() {
    Vla<int> a(3);
    a[0] = 3, a[1] = 4, a[2] = 5;
    cout << a[0] << endl;
    Vla<char> b(5);
    b[0] = 'a', b[1] = 'b', b[2] = 'c';
    cout << b[0] << endl;
    return 0;
}
// 实例化如下
// class /* Vla<int> */ {
//     unsigned size;
//     int* ptr;

// public:
//     Vla(unsigned size) : size{size} {
//         ptr = new int[size];
//     }
//     int& operator[](unsigned i) {
//         return ptr[i];
//     }
//     ~Vla() {
//         delete[] ptr;
//     }
// };